Chapter overview
The primary goal of this dissertation is to describe how conceptual representations of mental life develop over early and middle childhood - but before diving into the development of this concept, it is useful to examine an adult endpoint. This is provided by my previous work on concepts of mental life among ordinary US adults (Weisman et al., 2017). This previous work provides the theoretical foundation for this dissertation, as well as a design template for the developmental studies to be discussed in the following chapters.
The studies described in Weisman et al. (2017) were designed to address our first question about conceptual representation: What are the fundamental components, or “conceptual units,” of ordinary people’s representation of mental life? Analyses of this question were the primary focus of Weisman et al. (2017). However, as I argued in Chapter XX, the design of these studies also provides an opportunity to examine two other key aspects of these representations: the organization of these units and the way this concept is applied or deployed in reasoning about the wide variety of “beings” in the world.
In this chapter, I provide a summary of my previous findings regarding the conceptual units employed by US adults in their representations of mental life, as published in Weisman et al. (2017). I then present a novel re-analysis of these datasets, designed to shed light on the organization of these conceptual units - a topic that was not addressed in Weisman et al. (2017). Finally, I summarize what these studies suggest about the application or deployment of these conceptual representations in reasoning about specific target beings (e.g., humans, other mammals, insects, technologies, etc.) - a topic that was only briefly discussed in Weisman et al. (2017). Taken together, these three perspectives on the data first published in Weisman et al. (2017) paint a comprehensive picture of US adults’ conceptual representations of mental life, which in turn provides an adult endpoint for the developmental work that constitutes the bulk of this dissertation.
Conceptual units

Organization of conceptual units

Application

LS0tCnRpdGxlOiAiQ2hhcHRlciBJSUk6IFN0dWR5IDE6IEFuIGFkdWx0IGVuZHBvaW50IGZvciBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSIKc3VidGl0bGU6ICJSZWFuYWx5c2lzIG9mIFdlaXNtYW4sIER3ZWNrLCAmIE1hcmttYW4gKDIwMTcpIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC42NywKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KIyAjIGZvciBrbml0dGluZyB0byAuZG9jeAojIG91dHB1dDoKIyAgIHdvcmRfZG9jdW1lbnQ6CiMgICAgIHJlZmVyZW5jZV9kb2N4OiAiLi93b3JkLXN0eWxlcy1yZWZlcmVuY2UuZG9jeCIKIyBhbHdheXNfYWxsb3dfaHRtbDogeWVzCiAgIAojICMgZm9yIGtuaXR0aW5nIHRvIC5uYi5odG1sIAojIG91dHB1dDoKIyAgIGh0bWxfbm90ZWJvb2s6CiMgICAgIHRvYzogeWVzCiMgICAgIHRvY19kZXB0aDogNAojICAgICB0b2NfZmxvYXQ6IHllcwpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShsYW5nY29nKSAjIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2xhbmdjb2cvbGFuZ2NvZy1wYWNrYWdlCiMgbGlicmFyeShsbWU0KQpsaWJyYXJ5KGJybXMpCmxpYnJhcnkoc3RyaW5naSkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGthYmxlRXh0cmEpCgojIHBsb3R0aW5nCnRoZW1lX3NldCh0aGVtZV9idygpKQpjb2xvcnMyMSA8LSBjb2xvclJhbXBQYWxldHRlKGMoIiM2YTNkOWEiLCAiIzFmNzhiNCIsICIjMzNhMDJjIiwgIiNmZjdmMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZTMxYTFjIiksICMgZnJvbSBjb2xvcmJyZXdlcjIub3JnICJQYWlyZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgPSAiTGFiIikoMjEpCmBgYAoKYGBge3J9CiMgc3VwcG9ydGluZyBmdW5jdGlvbnMKc291cmNlKCIuL3NjcmlwdHMvbWF4X2ZhY3RvcnNfZWZhLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9yZXRlbl9mdW4uUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3Bsb3RfZnVuLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9lZmFfZnVuLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy9tc19mdW4uUiIpCgojIGZ1bmN0aW9ucyBmcm9tIFdlaXNtYW4gZXQgYWwuICgyMDE3KQpzb3VyY2UoIi4vc2NyaXB0cy9wbmFzX2Z1bi5SIikKYGBgCgpgYGB7cn0KIyBob3cgdG8gaGFuZGxlIG91dGxpZXJzCmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIgIyBSRVBPUlRFRDoga2VlcCBhbGwgZGF0YQojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyB3aGV0aGVyIHRvIGV4Y2x1ZGUgYW55IGNoYXJhY3RlcnMgaW4gc3R1ZHkgNApjaG9zZW5FeGNsdWRlIDwtICJub25lIiAjIFJFUE9SVEVEOiBrZWVwIGFsbCBjaGFyYWN0ZXJzCiMgY2hvc2VuRXhjbHVkZSA8LSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIpCgojIHdoZXRoZXIgdG8gZXhjbHVkZSBhbnkgbWVudGFsIGNhcGFjaXRpZXMKY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiICMgUkVQT1JURUQ6IGtlZXAgYWxsIGNhcGFjaXRpZXMKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgoKIyB3aGF0IGZhY3RvcmluZyBtZXRob2QgdG8gdXNlCmNob3Nlbl9mbSA8LSAibWlucmVzIiAjIFJFUE9SVEVEIChzZWUgYWx0ZXJuYXRpdmUgb3B0aW9ucyBpbiA/ZmEpCgojIHdoYXQgY29ycmVsYXRpb24gdG8gdXNlCmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBSRVBPUlRFRDogcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgpjaG9zZW5fY29yIDwtIGNob3NlbkNvclR5cGUKCiMgd2hhdCByb3RhdGlvbiB0byB1c2UKY2hvc2VuUm90VHlwZSA8LSAidmFyaW1heCIgIyBSRVBPUlRFRDogdmFyaW1heCByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KY2hvc2VuX3JvdCA8LSBjaG9zZW5Sb3RUeXBlCgojIHdoYXQgc2NvcmluZyBtZXRob2QgdG8gdXNlCmNob3Nlbl9zY29yZXMgPC0gInRlbkJlcmdlIiAjIFJFUE9SVEVECiMgY2hvc2VuX3Njb3JlcyA8LSAicmVncmVzc2lvbiIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KYGBgCgpgYGB7cn0KIyBzdHVkeSAxICgyMDE1LTEyLTE1LCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vMjl2bmcvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIgKDIwMTYtMDEtMTIsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cyAtIFJFUExJQ0FUSU9OKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2c3NmhqL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzICgyMDE2LTAxLTEwLCAyIGNvbmRpdGlvbnMsIHdpdGhpbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9lcHlrZi9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNCAoMjAxNi0wMS0xNCwgMjEgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHk0IDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9rZHpnZS9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7cn0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIikKZDIgPC0gY2xlYW51cCgic3R1ZHkgMiIpCmQzIDwtIGNsZWFudXAoInN0dWR5IDMiKQpkNCA8LSBjbGVhbnVwKCJzdHVkeSA0IikgJT4lCiAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIsICJyb2JvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JlIiwgImJlZXRsZSIsICJmaXNoIiwgImJsdWVqYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvZyIsICJtb3VzZSIsICJnb2F0IiwgImJlYXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZyIsICJkb2xwaGluIiwgImVsZXBoYW50IiwgImNoaW1wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZldHVzIiwgInB2cyIsICJpbmZhbnQiLCAiY2hpbGQiLCAiYWR1bHQiKSkpCmBgYAoKYGBge3J9CmQxX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJhbGwiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKZDNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImFsbCIpCmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKClRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBkaXNzZXJ0YXRpb24gaXMgdG8gZGVzY3JpYmUgaG93IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGRldmVsb3Agb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAtIGJ1dCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgY29uY2VwdCwgaXQgaXMgdXNlZnVsIHRvIGV4YW1pbmUgYW4gYWR1bHQgZW5kcG9pbnQuIFRoaXMgaXMgcHJvdmlkZWQgYnkgbXkgcHJldmlvdXMgd29yayBvbiBjb25jZXB0cyBvZiBtZW50YWwgbGlmZSBhbW9uZyBvcmRpbmFyeSBVUyBhZHVsdHMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gVGhpcyBwcmV2aW91cyB3b3JrIHByb3ZpZGVzIHRoZSB0aGVvcmV0aWNhbCBmb3VuZGF0aW9uIGZvciB0aGlzIGRpc3NlcnRhdGlvbiwgYXMgd2VsbCBhcyBhIGRlc2lnbiB0ZW1wbGF0ZSBmb3IgdGhlIGRldmVsb3BtZW50YWwgc3R1ZGllcyB0byBiZSBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBjaGFwdGVycy4KClRoZSBzdHVkaWVzIGRlc2NyaWJlZCBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNykgd2VyZSBkZXNpZ25lZCB0byBhZGRyZXNzIG91ciBmaXJzdCBxdWVzdGlvbiBhYm91dCBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uOiBXaGF0IGFyZSB0aGUgZnVuZGFtZW50YWwgY29tcG9uZW50cywgb3IgImNvbmNlcHR1YWwgdW5pdHMsIiBvZiBvcmRpbmFyeSBwZW9wbGUncyByZXByZXNlbnRhdGlvbiBvZiBtZW50YWwgbGlmZT8gQW5hbHlzZXMgb2YgdGhpcyBxdWVzdGlvbiB3ZXJlIHRoZSBwcmltYXJ5IGZvY3VzIG9mIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gSG93ZXZlciwgYXMgSSBhcmd1ZWQgaW4gQ2hhcHRlciBYWCwgdGhlIGRlc2lnbiBvZiB0aGVzZSBzdHVkaWVzIGFsc28gcHJvdmlkZXMgYW4gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0d28gb3RoZXIga2V5IGFzcGVjdHMgb2YgdGhlc2UgcmVwcmVzZW50YXRpb25zOiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlIHVuaXRzIGFuZCB0aGUgd2F5IHRoaXMgY29uY2VwdCBpcyBhcHBsaWVkIG9yIGRlcGxveWVkIGluIHJlYXNvbmluZyBhYm91dCB0aGUgd2lkZSB2YXJpZXR5IG9mICJiZWluZ3MiIGluIHRoZSB3b3JsZC4KCkluIHRoaXMgY2hhcHRlciwgSSBwcm92aWRlIGEgc3VtbWFyeSBvZiBteSBwcmV2aW91cyBmaW5kaW5ncyByZWdhcmRpbmcgdGhlIGNvbmNlcHR1YWwgdW5pdHMgZW1wbG95ZWQgYnkgVVMgYWR1bHRzIGluIHRoZWlyIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSwgYXMgcHVibGlzaGVkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gSSB0aGVuIHByZXNlbnQgYSBub3ZlbCByZS1hbmFseXNpcyBvZiB0aGVzZSBkYXRhc2V0cywgZGVzaWduZWQgdG8gc2hlZCBsaWdodCBvbiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMgLSBhIHRvcGljIHRoYXQgd2FzIG5vdCBhZGRyZXNzZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLiBGaW5hbGx5LCBJIHN1bW1hcml6ZSB3aGF0IHRoZXNlIHN0dWRpZXMgc3VnZ2VzdCBhYm91dCB0aGUgYXBwbGljYXRpb24gb3IgZGVwbG95bWVudCBvZiB0aGVzZSBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBpbiByZWFzb25pbmcgYWJvdXQgc3BlY2lmaWMgdGFyZ2V0IGJlaW5ncyAoZS5nLiwgaHVtYW5zLCBvdGhlciBtYW1tYWxzLCBpbnNlY3RzLCB0ZWNobm9sb2dpZXMsIGV0Yy4pIC0gYSB0b3BpYyB0aGF0IHdhcyBvbmx5IGJyaWVmbHkgZGlzY3Vzc2VkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KS4gVGFrZW4gdG9nZXRoZXIsIHRoZXNlIHRocmVlIHBlcnNwZWN0aXZlcyBvbiB0aGUgZGF0YSBmaXJzdCBwdWJsaXNoZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpIHBhaW50IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIFVTIGFkdWx0cycgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYW4gYWR1bHQgZW5kcG9pbnQgZm9yIHRoZSBkZXZlbG9wbWVudGFsIHdvcmsgdGhhdCBjb25zdGl0dXRlcyB0aGUgYnVsayBvZiB0aGlzIGRpc3NlcnRhdGlvbi4KCiMgQ29uY2VwdHVhbCB1bml0cwoKYGBge3J9CiMgZG8gYWxsIEVGQXMKZWZhX3BuYXNkMSA8LSBmYV9mdW4oZDFfYWxsICU+JSByZW5hbWVfZnVuKCksIHJldGVuX2Z1bihkMV9hbGwsICJ2YXJpbWF4IikpCmVmYV9wbmFzZDIgPC0gZmFfZnVuKGQyX2FsbCAlPiUgcmVuYW1lX2Z1bigpLCByZXRlbl9mdW4oZDJfYWxsLCAidmFyaW1heCIpKQplZmFfcG5hc2QzIDwtIGZhX2Z1bihkM19hbGwgJT4lIHJlbmFtZV9mdW4oKSwgcmV0ZW5fZnVuKGQzX2FsbCwgInZhcmltYXgiKSkKZWZhX3BuYXNkNCA8LSBmYV9mdW4oZDRfYWxsICU+JSByZW5hbWVfZnVuKCksIHJldGVuX2Z1bihkNF9hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3J9CiMgbWFrZSBhbGwgaGVhdG1hcHMKZmlnMDFhIDwtIGhlYXRtYXBfZnVuKGVmYV9wbmFzZDEsIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiV2Vpc21hbiBldCBhbC4sICgyMDE3KTogU3R1ZHkgMVxuKEFkdWx0cywgbj0iLCAKICAgICAgICAgICAgICAgICAgICAgIG5yb3coZDFfYWxsKSwgIikiKSkKCmZpZzAxYiA8LSBoZWF0bWFwX2Z1bihlZmFfcG5hc2QyLCBmYWN0b3JfbmFtZXMgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJXZWlzbWFuIGV0IGFsLiwgKDIwMTcpOiBTdHVkeSAyXG4oQWR1bHRzLCBuPSIsIAogICAgICAgICAgICAgICAgICAgICAgbnJvdyhkMl9hbGwpLCAiKSIpKQoKZmlnMDFjIDwtIGhlYXRtYXBfZnVuKGVmYV9wbmFzZDMsIGZhY3Rvcl9uYW1lcyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZTAoIldlaXNtYW4gZXQgYWwuLCAoMjAxNyk6IFN0dWR5IDNcbihBZHVsdHMsIG49IiwgCiAgICAgICAgICAgICAgICAgICAgICBucm93KGQzX2FsbCksICIpIikpCgpmaWcwMWQgPC0gaGVhdG1hcF9mdW4oZWZhX3BuYXNkNCwgZmFjdG9yX25hbWVzID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpICsgCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUwKCJXZWlzbWFuIGV0IGFsLiwgKDIwMTcpOiBTdHVkeSA0XG4oQWR1bHRzLCBuPSIsIAogICAgICAgICAgICAgICAgICAgICAgbnJvdyhkNF9hbGwpLCAiKSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBpbmNsdWRlID0gVH0KIyBwdXQgZW0gYWxsIHRvZ2V0aGVyIGFuZCB3aGF0IGRvIHlvdSBnZXQKZmlnMDFfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZzAxYSwgZmlnMDFiLCBmaWcwMWMsIGZpZzAxZCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCByZWxfd2lkdGhzID0gYygxLCAxLCAxLCAxLjIpLCBsYWJlbHMgPSAiQVVUTyIpCgpmaWcwMV93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwMV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAzLjE6IEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyByZXN1bHRzIGZvciBhZHVsdHMgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLCBTdHVkaWVzIDEtNC4gSW4gU3R1ZGllcyAxIChBKSBhbmQgMiAoQiksIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgNDAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiB0d28gdGFyZ2V0IGNoYXJhY3RlcnM6IGEgYmVldGxlIG9yIGEgcm9ib3QuIEluIFN0dWR5IDMgKEMpLCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0d28gdGFyZ2V0IGNoYXJhY3RlcnMsIHByZXNlbnRlZCBzaWRlIGJ5IHNpZGU6IGEgYmVldGxlIGFuZCBhIHJvYm90LiBJbiBTdHVkeSA0IChEKSwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIDIxIHRhcmdldCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgYSB2YXJpZXR5IG9mIGh1bWFucywgbm9uLWh1bWFuIGFuaW1hbHMsIHRlY2hub2xvZ2llcywgYW5kIG90aGVyIGVudGl0aWVzLiIsIDIxMCksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWcwMV93aXRoX2NhcHRpb24pCmBgYAoKYGBge3J9CiMgbGlicmFyeShwbG90bHkpCiMgcGxvdF9seShsb2FkaW5nc19mdW4oZWZhX3BuYXNkNCwgbG9uZ193aWRlID0gIndpZGUiKSwgCiMgICAgICAgICB4ID0gfkYxLCB5ID0gfkYyLCB6ID0gfkYzLAojICAgICAgICAgdGV4dCA9IH5jYXBhY2l0eSkgJT4lCiMgICBhZGRfbWFya2VycygpICU+JQojICAgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAnQk9EWScpLAojICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAnSEVBUlQnKSwKIyAgICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ01JTkQnKSkpCmBgYAoKCiMgT3JnYW5pemF0aW9uIG9mIGNvbmNlcHR1YWwgdW5pdHMKCmBgYHtyfQpjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyA8LSBmdW5jdGlvbihkZiwgd2hpY2hfZWZhKXsKICAKICBob3dfbWFueV9jYXAgPC0gbG9hZGluZ3NfZnVuKHdoaWNoX2VmYSkgJT4lCiAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGNvdW50KGZhY3RvcikKICBob3dfbWFueV9jYXAgPC0gbWluKGhvd19tYW55X2NhcCRuKQogIAogIGxvYWRpbmdzIDwtIGxvYWRpbmdzX2Z1bih3aGljaF9lZmEpICU+JQogICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogICAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBncm91cF9ieShmYWN0b3IpICU+JQogICAgdG9wX24oaG93X21hbnlfY2FwLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKQogIAogIGJ5cGFydCA8LSAgZGYgJT4lCiAgICAjIHNlbGVjdCgtYyhzdHVkeSwgZGF0ZSwgc3RhcnRfdGltZSwgZW5kX3RpbWUsIGR1cmF0aW9uLCBmaW5pc2hlZCwgbXR1cmtjb2RlLAogICAgIyAgICAgICAgICAgQ0FUQ0gsIHlvYiwgZ2VuZGVyLCBmZWVkYmFjaywgZGlzcGxheV9vcmRlciwgZmluaXNoZWRfbW9kLCAKICAgICMgICAgICAgICAgIHlvYl9jb3JyZWN0LCBhZ2VfYXBwcm94LCByYWNlX2NhdCwgcmVsaWdpb25fY2F0KSkgJT4lCiAgICBzZWxlY3Qoc3ViaWQsIGNvbmRpdGlvbiwgYGZlZWxpbmcgaGFwcHlgOmBleHBlcmllbmNpbmcgcHJpZGVgKSAlPiUKICAgIGRpc3RpbmN0KCkgJT4lCiAgICBnYXRoZXIoY2FwYWNpdHksIHJlc3BvbnNlX251bSwgLWMoc3ViaWQsIGNvbmRpdGlvbikpICU+JQogICAgZmlsdGVyKGNhcGFjaXR5ICVpbiUgbG9hZGluZ3MkY2FwYWNpdHkpICU+JQogICAgbGVmdF9qb2luKGxvYWRpbmdzKQogIAogIGFscGhhIDwtIE5VTEwKICBmb3IoaSBpbiBsZXZlbHMoZmFjdG9yKGJ5cGFydCRmYWN0b3IpKSl7CiAgICBhIDwtIGJ5cGFydCAlPiUKICAgICAgZmlsdGVyKGZhY3RvciA9PSBpKSAlPiUKICAgICAgc2VsZWN0KHN1YmlkLCBjb25kaXRpb24sIGNhcGFjaXR5LCByZXNwb25zZV9udW0pICU+JQogICAgICBzcHJlYWQoY2FwYWNpdHksIHJlc3BvbnNlX251bSkgJT4lCiAgICAgIGFscGhhKCkKICAgIAogICAgYWxwaGFbaV0gPC0gYSR0b3RhbCRyYXdfYWxwaGEKICB9CiAgCiAgcmV0dXJuKGFscGhhKQp9CmBgYAoKYGBge3J9CnN1cHByZXNzV2FybmluZ3MoY2F0c2NvcmVfYWxwaGFfZnVuX3BuYXMocmVuYW1lX2Z1bihkMSksIGVmYV9wbmFzZDEpKQpzdXBwcmVzc1dhcm5pbmdzKGNhdHNjb3JlX2FscGhhX2Z1bl9wbmFzKHJlbmFtZV9mdW4oZDIpLCBlZmFfcG5hc2QyKSkKc3VwcHJlc3NXYXJuaW5ncyhjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyhkMyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZShjb25kaXRpb24gPSB0YXJnZXQpLCBlZmFfcG5hc2QzKSkKc3VwcHJlc3NXYXJuaW5ncyhjYXRzY29yZV9hbHBoYV9mdW5fcG5hcyhyZW5hbWVfZnVuKGQ0KSwgZWZhX3BuYXNkNCkpCmBgYAoKCmBgYHtyfQpwbG90MDJhIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQxICU+JSByZW5hbWVfZnVuKCksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpLCBzaGFwZXMgPSBjKDIxLCAyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIldlaXNtYW4gZXQgYWwuICgyMDE3KTogU3R1ZHkgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYl9sZXR0ZXIgPSAiQSIpCgpwbG90MDJiIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQyICU+JSByZW5hbWVfZnVuKCksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpLCBzaGFwZXMgPSBjKDIxLCAyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIldlaXNtYW4gZXQgYWwuICgyMDE3KTogU3R1ZHkgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYl9sZXR0ZXIgPSAiQiIpCgpwbG90MDJjIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQzICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWNvbmRpdGlvbikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpLCBzaGFwZXMgPSBjKDIxLCAyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIldlaXNtYW4gZXQgYWwuICgyMDE3KTogU3R1ZHkgMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYl9sZXR0ZXIgPSAiQyIpCgpwbG90MDJkIDwtIGhpZXJfcGxvdF9hZ2dfcG5hcyhkZiA9IGQ0ICU+JSByZW5hbWVfZnVuKCksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9yczIxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSByZXAoMjEsIDIxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiX2xldHRlciA9ICJEIikKYGBgCgpgYGB7cn0KZmlnMDJfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3QwMmEsIHBsb3QwMmIsIHBsb3QwMmMsIHBsb3QwMmQsIG5yb3cgPSAxKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC44NSwgaW5jbHVkZSA9IFR9CmZpZzAyX3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZzAyX3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDMuMjogQ29tcGFyaXNvbiBvZiBlbmRvcnNlbWVudHMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGNhcGFjaXRpZXMgYW1vbmcgYWR1bHRzIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KSwgU3R1ZGllcyAxLTQgKGNvbHVtbnMgQS1EKS4gVGhlIHRvcCByb3cgKEExLUQxKSBjb21wYXJlcyBlbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gSEVBUlQgY2FwYWNpdGllczsgdGhlIG1pZGRsZSByb3cgKEEyLUQyKSBjb21wYXJlcyBCT0RZIHZzLiBNSU5EOyBhbmQgdGhlIGJvdHRvbSByb3cgKEEzLUQzKSBjb21wYXJlcyBIRUFSVCB2cy4gTUlORC4gRm9yIGVhY2ggc3R1ZHksIEVGQSB3YXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY2FwYWNpdGllcyB3ZXJlIGNvbnNpZGVyZWQgcGFydCBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgKHNlZSBtYWluIHRleHQpLiBGb3IgZWFjaCBjYXBhY2l0eSwgZGVncmVlIG9mIGVuZG9yc2VtZW50IGNvdWxkIHJhbmdlIGZyb20gMCAobm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChmdWxseSBjYXBhYmxlKS4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAxNTApLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnMDJfd2l0aF9jYXB0aW9uKQpgYGAKCmBgYHtyfQpuZXdmdW4gPC0gZnVuY3Rpb24oZGYsIHdoaWNoX2VmYSwgY29sb3JzLCBmdW4gPSAiZGlmZiIsIHBvaW50cyA9IFQpIHsKICAKICBwbG90X2RmIDwtIGRmICU+JSAKICAgIGNhdHNjb3JlX2Z1bl9wbmFzKHdoaWNoX2VmYSA9IHdoaWNoX2VmYSkgJT4lCiAgICBkaXN0aW5jdCgpICU+JQogICAgc3ByZWFkKGZhY3Rvciwgc2NvcmUpCiAgCiAgaWYoZnVuID09ICJkaWZmIil7CiAgICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICBtdXRhdGUoRjFtaW51c0YyID0gRjEgLSBGMiwKICAgICAgICAgICBGMW1pbnVzRjMgPSBGMSAtIEYzLAogICAgICAgICAgIEYybWludXNGMyA9IEYyIC0gRjMpCiAgfQogIAogIGlmKGZ1biA9PSAicmF0aW8iKXsKICAgIHBsb3RfZGYgPC0gcGxvdF9kZiAlPiUKICAgICAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIkYiKSksIGZ1bnMoLiArIDAuMDAxKSkgJT4lCiAgICAgIG11dGF0ZShGMWRpdkYyID0gRjEvRjIsCiAgICAgICAgICAgICBGMWRpdkYzID0gRjEvRjMsCiAgICAgICAgICAgICBGMmRpdkYzID0gRjIvRjMpCiAgfQogIAogIHBsb3RfZGYgPC0gcGxvdF9kZiAlPiUKICAgIHNlbGVjdCgtYyhGMSwgRjIsIEYzKSkgJT4lCiAgICBnYXRoZXIoZmFjdG9ycywgY29tcCwgc3RhcnRzX3dpdGgoIkYiKSkgJT4lCiAgICBkaXN0aW5jdCgpCiAgCiAgcGxvdCA8LSBwbG90X2RmICU+JQogICAgZ2dwbG90KGFlcyh4ID0gZmFjdG9ycywgeSA9IGNvbXAsIGNvbG9yID0gY29uZGl0aW9uKSkKICAKICBpZihwb2ludHMpewogICAgcGxvdCA8LSBwbG90ICsKICAgICAgZ2VvbV9wb2ludChhZXMoZmlsbCA9IGNvbmRpdGlvbiksIGFscGhhID0gMC4yLAogICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLmhlaWdodCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIud2lkdGggPSAwLjcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2RnZS53aWR0aCA9IDAuNzUpKQogIH0KICAKICBwbG90IDwtIHBsb3QgKwogICAgIyBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4KICAgICMgICAgICAgICAgICAgICAgICU+JSBncm91cF9ieShmYWN0b3JzLCBjb25kaXRpb24pICU+JQogICAgIyAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJjb21wIikgJT4lCiAgICAjICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICMgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIsIAogICAgIyAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjb25kaXRpb24pLAogICAgIyAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNzUpLCBmYXR0ZW4gPSAxLjIsCiAgICAjICAgICAgICAgICAgICAgICBzaGFwZSA9IDIxLCBjb2xvciA9ICJibGFjayIpICsKICAgIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLgogICAgICAgICAgICAgICAgICAgICU+JSBncm91cF9ieShmYWN0b3JzKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImNvbXAiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IDE4LCBjb2xvciA9ICJibGFjayIpICsKICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbG9ycykgKwogICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcnMpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQogIAogIGlmKGZ1biA9PSAiZGlmZiIpewogICAgcGxvdCA8LSBwbG90ICsgCiAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpCiAgfQogIAogIGlmKGZ1biA9PSAicmF0aW8iKXsKICAgIHBsb3QgPC0gcGxvdCArIAogICAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxLCBsdHkgPSAyKSArCiAgICAgIGZhY2V0X3dyYXAofiBmYWN0b3JzLCBzY2FsZXMgPSAiZnJlZSIpCiAgfQogICAgCiAgICByZXR1cm4ocGxvdCkKfQpgYGAKCmBgYHtyfQpuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQxKSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkMSwgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpCm5ld2Z1bihkZiA9IHJlbmFtZV9mdW4oZDIpLCB3aGljaF9lZmEgPSBlZmFfcG5hc2QyLCBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkKbmV3ZnVuKGRmID0gZDMgJT4lCiAgICAgICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwKICAgICAgIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDMsIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKQpuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQ0KSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkNCwgY29sb3JzID0gY29sb3JzMjEpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKYGBge3J9Cm5ld2Z1bl9zdGF0IDwtIGZ1bmN0aW9uKGRmLCB3aGljaF9lZmEsIGNvbG9ycywgZnVuID0gImRpZmYiLCBzdGQgPSBUKSB7CiAgCiAgcGxvdF9kZiA8LSBkZiAlPiUgCiAgICBjYXRzY29yZV9mdW5fcG5hcyh3aGljaF9lZmEgPSB3aGljaF9lZmEpICU+JQogICAgZGlzdGluY3QoKSAlPiUKICAgIHNwcmVhZChmYWN0b3IsIHNjb3JlKQogIAogIGlmKGZ1biA9PSAiZGlmZiIpewogICAgcGxvdF9kZiA8LSBwbG90X2RmICU+JQogICAgbXV0YXRlKEYxbWludXNGMiA9IEYxIC0gRjIsCiAgICAgICAgICAgRjFtaW51c0YzID0gRjEgLSBGMywKICAgICAgICAgICBGMm1pbnVzRjMgPSBGMiAtIEYzKQogIH0KICAKICBpZihmdW4gPT0gInJhdGlvIil7CiAgICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICAgIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJGIikpLCBmdW5zKC4gKyAwLjAwMSkpICU+JQogICAgICBtdXRhdGUoRjFkaXZGMiA9IEYxL0YyLAogICAgICAgICAgICAgRjFkaXZGMyA9IEYxL0YzLAogICAgICAgICAgICAgRjJkaXZGMyA9IEYyL0YzKQogIH0KICAKICBwbG90X2RmIDwtIHBsb3RfZGYgJT4lCiAgICBzZWxlY3QoLWMoRjEsIEYyLCBGMykpICU+JQogICAgZ2F0aGVyKGZhY3RvcnMsIGNvbXAsIHN0YXJ0c193aXRoKCJGIikpICU+JQogICAgZGlzdGluY3QoKQogIAogIGlmKGZ1biA9PSAiZGlmZiIpewogICAgCiAgICBpZihzdGQpe3Bsb3RfZGYgPC0gcGxvdF9kZiAlPiUKICAgICAgZ3JvdXBfYnkoZmFjdG9ycykgJT4lCiAgICAgIG11dGF0ZShjb21wID0gc2NhbGUoY29tcCwgY2VudGVyID0gRikpICU+JQogICAgICB1bmdyb3VwKCkKICAgIH0KICAgIAogICAgcmVzdWx0cyA8LSBsbWU0OjpsbWVyKGNvbXAgfiAwICsgZmFjdG9ycyArICgxIHwgc3ViaWQpLCBwbG90X2RmKQogIH0KICAKICBpZihmdW4gPT0gInJhdGlvIil7CiAgICAKICAgIGlmKHN0ZCl7cGxvdF9kZiA8LSBwbG90X2RmICU+JQogICAgICBncm91cF9ieShmYWN0b3JzKSAlPiUKICAgICAgbXV0YXRlKGNvbXAgPSBzY2FsZShjb21wIC0gMSwgY2VudGVyID0gRikpICU+JSAjIG1ha2UgIjEiIGNvbXBhcmlzb24gMAogICAgICB1bmdyb3VwKCkKICAgIH0KICAgIAogICAgcmVzdWx0cyA8LSBsbWU0OjpsbWVyKGNvbXAgfiAwICsgZmFjdG9ycyArICgxIHwgc3ViaWQpLCBwbG90X2RmKQogIH0KICAKICByZXR1cm4ocmVzdWx0cykKfQpgYGAKCmBgYHtyfQpzdW1tYXJ5KG5ld2Z1bl9zdGF0KHJlbmFtZV9mdW4oZDEpLCBlZmFfcG5hc2QxLCBmdW4gPSAiZGlmZiIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQyKSwgZWZhX3BuYXNkMiwgZnVuID0gImRpZmYiKSkkY29lZmZpY2llbnRzCnN1bW1hcnkobmV3ZnVuX3N0YXQoZDMgJT4lCiAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfZnVuKCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWNvbmRpdGlvbikgJT4lCiAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwgCiAgICAgICAgICAgICAgICAgICAgZWZhX3BuYXNkMSwgZnVuID0gImRpZmYiKSkkY29lZmZpY2llbnRzCnN1bW1hcnkobmV3ZnVuX3N0YXQocmVuYW1lX2Z1bihkNCksIGVmYV9wbmFzZDQsIGZ1biA9ICJkaWZmIikpJGNvZWZmaWNpZW50cwpgYGAKCmBgYHtyfQpuZXdmdW4oZGYgPSByZW5hbWVfZnVuKGQxKSwgd2hpY2hfZWZhID0gZWZhX3BuYXNkMSwgCiAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSwgZnVuID0gInJhdGlvIiwgcG9pbnRzID0gRikKbmV3ZnVuKGRmID0gcmVuYW1lX2Z1bihkMiksIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDIsCiAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSwgZnVuID0gInJhdGlvIiwgcG9pbnRzID0gRikKbmV3ZnVuKGRmID0gZDMgJT4lCiAgICAgICAgIHJlbmFtZV9mdW4oKSAlPiUKICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwKICAgICAgIHdoaWNoX2VmYSA9IGVmYV9wbmFzZDMsIGNvbG9ycyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpLCAKICAgICAgIGZ1biA9ICJyYXRpbyIsIHBvaW50cyA9IEYpCm5ld2Z1bihkZiA9IHJlbmFtZV9mdW4oZDQpLCB3aGljaF9lZmEgPSBlZmFfcG5hc2Q0LAogICAgICAgY29sb3JzID0gY29sb3JzMjEsIGZ1biA9ICJyYXRpbyIsIHBvaW50cyA9IEYpCmBgYAoKYGBge3J9CnN1bW1hcnkobmV3ZnVuX3N0YXQocmVuYW1lX2Z1bihkMSksIGVmYV9wbmFzZDEsIGZ1biA9ICJyYXRpbyIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQyKSwgZWZhX3BuYXNkMiwgZnVuID0gInJhdGlvIikpJGNvZWZmaWNpZW50cwpzdW1tYXJ5KG5ld2Z1bl9zdGF0KGQzICU+JQogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2Z1bigpICU+JQogICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jb25kaXRpb24pICU+JQogICAgICAgICAgICAgICAgICAgICAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCksIAogICAgICAgICAgICAgICAgICAgIGVmYV9wbmFzZDEsIGZ1biA9ICJyYXRpbyIpKSRjb2VmZmljaWVudHMKc3VtbWFyeShuZXdmdW5fc3RhdChyZW5hbWVfZnVuKGQ0KSwgZWZhX3BuYXNkNCwgZnVuID0gInJhdGlvIikpJGNvZWZmaWNpZW50cwpgYGAKCiMgQXBwbGljYXRpb24KCmBgYHtyfQpwbG90MDNhIDwtIGFwcF9wbG90X2Z1bl9wbmFzKGQxICU+JSByZW5hbWVfZnVuKCksIGVmYV9wbmFzZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IGMoMTYsIDE1KSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSAxIikKCnBsb3QwM2IgPC0gYXBwX3Bsb3RfZnVuX3BuYXMoZDIgJT4lIHJlbmFtZV9mdW4oKSwgZWZhX3BuYXNkMiwgIyBjb3VkbCBkbyBlZmFfcG5hc2QxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IGMoMTYsIDE1KSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSAyIikKCnBsb3QwM2MgPC0gYXBwX3Bsb3RfZnVuX3BuYXMoZDMgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2Z1bigpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtY29uZGl0aW9uKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfcG5hc2QzLCAjIGNvdWRsIGRvIGVmYV9wbmFzZDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVzID0gYygxNiwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJXZWlzbWFuIGV0IGFsLiAoMjAxNyk6IFN0dWR5IDMiKQoKcGxvdDAzZCA8LSBhcHBfcGxvdF9mdW5fcG5hcyhkNCAlPiUgcmVuYW1lX2Z1bigpLCBlZmFfcG5hc2Q0LCAjIGNvdWRsIGRvIGVmYV9wbmFzZDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMyMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSByZXAoMTYsIDIxKSkgKwogIGxhYnModGl0bGUgPSAiV2Vpc21hbiBldCBhbC4gKDIwMTcpOiBTdHVkeSA0IikKYGBgCgpgYGB7cn0KZmlnMDNfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RfZ3JpZChwbG90MDNhLCBwbG90MDNiLCBwbG90MDNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAxLCBsYWJlbHMgPSAiQVVUTyIsIHNjYWxlID0gMC45NSksCiAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2dyaWQocGxvdDAzZCwgbGFiZWxzID0gIkQiLCBzY2FsZSA9IDAuOTg1KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5yb3cgPSAyLCByZWxfaGVpZ2h0cyA9IGMoMSwgMikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpmaWcwM193aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWcwM19wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSAzLjM6IE1lYW4gZW5kb3JzZW1lbnRzIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBjYXBhY2l0aWVzIGFtb25nIGFkdWx0cyBpbiBXZWlzbWFuIGV0IGFsLiAoMjAxNyksIFN0dWRpZXMgMS00IChBLUQpLiBGb3IgZWFjaCBzdHVkeSwgRUZBIHdhcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBjYXBhY2l0aWVzIHdlcmUgY29uc2lkZXJlZCBwYXJ0IG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCAoc2VlIG1haW4gdGV4dCkuIEZvciBlYWNoIGNhcGFjaXR5LCBkZWdyZWUgb2YgZW5kb3JzZW1lbnQgY291bGQgcmFuZ2UgZnJvbSAwIChub3QgYXQgYWxsIGNhcGFibGUpIHRvIDYgKGZ1bGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiAoU2VlIGFsc28gRmlndXJlIDMuMi4pIiwgMTUwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZzAzX3dpdGhfY2FwdGlvbikKYGBgCgpgYGB7cn0KIyBsaWJyYXJ5KHBsb3RseSkKIyBwbG90X2x5KGNhdHNjb3JlX2Z1bl9wbmFzKGQ0ICU+JSByZW5hbWVfZnVuKCksIGVmYV9wbmFzZDQpICU+JQojICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBzY29yZSksIAojICAgICAgICAgeCA9IH5GMSwgeSA9IH5GMiwgeiA9IH5GMywgCiMgICAgICAgICB0ZXh0ID0gfmNvbmRpdGlvbiwgY29sb3IgPSB+Y29uZGl0aW9uLAojICAgICAgICAgY29sb3JzID0gY29sb3JzMjEpICU+JQojICAgYWRkX21hcmtlcnMoKSAlPiUKIyAgIGxheW91dChzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0JPRFknKSwKIyAgICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ0hFQVJUJyksCiMgICAgICAgICAgICAgICAgICAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICdNSU5EJykpKQpgYGAKCmBgYHtyfQojIGxpYnJhcnkocGxvdGx5KQojIHBsb3RfbHkoY2F0c2NvcmVfZnVuX3BuYXMoZDQgJT4lIHJlbmFtZV9mdW4oKSwgZWZhX3BuYXNkNCkgJT4lCiMgICAgICAgICAgIGdyb3VwX2J5KGNvbmRpdGlvbiwgZmFjdG9yKSAlPiUKIyAgICAgICAgICAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUKIyAgICAgICAgICAgdW5ncm91cCgpICU+JQojICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBtZWFuKSwgCiMgICAgICAgICB4ID0gfkYxLCB5ID0gfkYyLCB6ID0gfkYzLCAKIyAgICAgICAgIHRleHQgPSB+Y29uZGl0aW9uLCBjb2xvciA9IH5jb25kaXRpb24sCiMgICAgICAgICBjb2xvcnMgPSBjb2xvcnMyMSkgJT4lCiMgICBhZGRfbWFya2VycygpICU+JQojICAgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAnQk9EWScpLAojICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAnSEVBUlQnKSwKIyAgICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ01JTkQnKSkpCmBgYAo=